I am #blessed to get to look at SF trees, including Cole Valley trees, the best trees.

Below, I wrangle some data because Allison told me to. We’ll find the top 5 highest observations of trees by legal status, wrangle, and graph.

# read in SF trees data

sf_trees <- read_csv(here::here("data", "sf_trees", "sf_trees.csv"))
## Parsed with column specification:
## cols(
##   tree_id = col_double(),
##   legal_status = col_character(),
##   species = col_character(),
##   address = col_character(),
##   site_order = col_double(),
##   site_info = col_character(),
##   caretaker = col_character(),
##   date = col_date(format = ""),
##   dbh = col_double(),
##   plot_size = col_character(),
##   latitude = col_double(),
##   longitude = col_double()
## )
# basic wrangling reminders

top_5_status <- sf_trees %>% 
  count(legal_status) %>% 
  drop_na(legal_status) %>% 
  rename(tree_count = n) %>% 
  relocate(tree_count) %>% 
  slice_max(tree_count, n = 5)

print(top_5_status)
## # A tibble: 5 x 2
##   tree_count legal_status                
##        <int> <chr>                       
## 1     141725 DPW Maintained              
## 2      39732 Permitted Site              
## 3       8106 Undocumented                
## 4       1648 Significant Tree            
## 5        971 Planning Code 138.1 required

And now, a #GRAPH

ggplot(data = top_5_status, aes(x = fct_reorder(legal_status, tree_count), y = tree_count))+
  geom_col()+
  labs(x = "Legal Status", y = "Tree Count")+
  coord_flip()+
  theme_minimal()

How refreshing…Blackwood Acacia Trees. Finally, learning how to do text to columns in R

blackwood <- sf_trees %>%
  filter(str_detect(species, "Blackwood Acacia")) %>% 
  select(legal_status, date, latitude, longitude)

ggplot(data = blackwood, aes(x = longitude, y = latitude))+
  geom_point()
## Warning: Removed 27 rows containing missing values (geom_point).

little more wrangling - separate and unite (combine or separate columns)

#separate
sf_trees_sep <- sf_trees %>% 
  separate(species, into = c("spp_scientific", "spp_common"), sep = "::")

#unite

sf_trees_unite <- sf_trees %>% 
  unite("id_status", tree_id:legal_status, sep = "LOVES")

Maps!!!! I’m gonna go rogue and not do what Allison did. We’re going to first use st_as_sf() to convert lat and long to spatial coordinates.

all_trees_spatial <- sf_trees_sep %>% 
  select(spp_common, latitude, longitude) %>%
  drop_na() %>% 
  st_as_sf(coords = c("longitude", "latitude"))

count_spp <- all_trees_spatial %>% 
  select(!geometry) %>% 
  count(spp_common) %>% 
  filter(spp_common != "") %>% 
  slice_max(n, n = 5)

top_tree <- unique(count_spp$spp_common)

all_trees_spatial <- all_trees_spatial %>% 
  filter(spp_common %in% c(top_tree))

st_crs(all_trees_spatial) = 4326

ggplot(data = all_trees_spatial)+
  geom_sf(aes(color = spp_common))

Read in SF roads shapefile

sf_map <- read_sf(here("data", "sf_map", "tl_2017_06075_roads.shp"))

st_transform(sf_map, 4326)
## Simple feature collection with 4087 features and 4 fields
## geometry type:  LINESTRING
## dimension:      XY
## bbox:           xmin: -122.5136 ymin: 37.70813 xmax: -122.3496 ymax: 37.83213
## CRS:            EPSG:4326
## # A tibble: 4,087 x 5
##    LINEARID   FULLNAME     RTTYP MTFCC                                  geometry
##  * <chr>      <chr>        <chr> <chr>                          <LINESTRING [°]>
##  1 110498938… Hwy 101 S O… M     S1400 (-122.4041 37.74842, -122.404 37.7483, -…
##  2 110498937… Hwy 101 N o… M     S1400 (-122.4744 37.80691, -122.4746 37.80684,…
##  3 110366022… Ludlow Aly … M     S1780 (-122.4596 37.73853, -122.4596 37.73845,…
##  4 110608181… Mission Bay… M     S1400 (-122.3946 37.77082, -122.3929 37.77092,…
##  5 110366689… 25th Ave N   M     S1400 (-122.4858 37.78953, -122.4855 37.78935,…
##  6 110368970… Willard N    M     S1400 (-122.457 37.77817, -122.457 37.77812, -…
##  7 110368970… 25th Ave N   M     S1400 (-122.4858 37.78953, -122.4858 37.78952,…
##  8 110498933… Avenue N     M     S1400 (-122.3643 37.81947, -122.3638 37.82064,…
##  9 110368970… 25th Ave N   M     S1400  (-122.4854 37.78982, -122.4858 37.78953)
## 10 110367749… Mission Bay… M     S1400 (-122.3865 37.77086, -122.3878 37.77076,…
## # … with 4,077 more rows
ggplot(data = sf_map)+
  geom_sf()

Now we’ll combine them!

ggplot()+
  geom_sf(data = sf_map, size = 0.1, color = "darkgray")+
  geom_sf(data = all_trees_spatial, aes (color = spp_common), size = .1)+
  theme_void()

Let’s make it interactive

tmap_mode("view")
## tmap mode set to interactive viewing
tm_shape(all_trees_spatial)+
  tm_dots()